package com.qqtech.qquan.circle.service;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import com.qqtech.core.frame.service.BaseService;
import com.qqtech.qquan.circle.enums.CircleTopicBizzTypeDictEnum;
import com.qqtech.qquan.circle.model.CircleTopic;
import com.qqtech.qquan.circle.model.CircleTopicQuery;
import com.qqtech.qquan.circle.model.CircleTopicVo;

public interface CircleTopicService extends BaseService<CircleTopic> {
	/**
	 * 查询圈子所有话题
	 * @param circleId
	 * @return
	 */
	List<CircleTopicVo> queryCircleTopics(int circleId);
	
	/**
	 * 我发布的话题
	 * @param userId
	 * @return
	 */
	List<CircleTopicVo> queryMyCircleTopics(Integer userId);
	
	/**
	 * 屏蔽一个圈子的所有话
	 * @param circleId
	 * @return 更新话题的数量
	 */
	int hideCircleTopics(int circleId, Integer optUserId);
	
	/**
	 * 显示-话题
	 * @param topicId
	 * @return
	 */
	int showTopic(int topicId, Integer optUserId);
	
	/**
	 * 屏蔽-话题
	 * @param topicId
	 * @return
	 */
	int hideTopic(int topicId, Integer optUserId);
	
	/**
	 * 创建一个话题
	 * @param circleTopic
	 * @return
	 */
	int addTopic(CircleTopic circleTopic);
	
	/**
	 * 是否版主
	 * @param userId
	 * @param topicId
	 * @return
	 */
	boolean isTopicCreator(Integer userId, Integer topicId);
	
	/**
	 * 删除一个话题
	 * @param topicId
	 */
	void deleteTopic(Integer topicId, Integer optUserId);
	
	/**
	 * 我发布的话题数量
	 * @param userId
	 * @return
	 */
	int queryMyTopicCount(Integer userId);
	
	/**
	 * 置顶
	 * @param topicId
	 * @param tag
	 * @return
	 */
	int doTop4Topic(int topicId, String tag, Integer optUserId);
	/**
	 * 取消置顶
	 * @param topicId
	 * @return
	 */
	int undoTop4Topic(int topicId, Integer optUserId);
	
	/**
     * 点击量+1
     * @param topicId
     */
    void increasePv(Integer topicId);
    
    /**
     * 评论数+1
     * @param topicId
     */
    void increaseComment(Integer topicId, int addCount);
    
    /**
     * 点赞数+1
     * @param topicId
     * @param addCount
     */
    void  increasePraise(Integer topicId, int addCount);

    /**
	 * 后台查询 --分页
	 * @param query
	 * @param pageable
	 * @return
	 */
	Page<CircleTopicVo> queryPageListAdmin(CircleTopicQuery query, Pageable pageable);
	/**
	 * 后台查询 --列表
	 * @param query
	 * @param pageable
	 * @return
	 */
	List<CircleTopicVo> queryList4Admin(CircleTopicQuery query, Pageable pageable);
	/**
	 * 后台查询列表-数量查询
	 * @param query
	 * @return
	 */
	int queryCount4Admin(CircleTopicQuery query);

	/**
	 * 根据圈子id查询话题发布人id列表
	 * @param circleId
	 * @return
	 */
	List<Integer> queryCreatorIds(Integer circleId);
	
	/**
	 * 根据话题发布人id查询圈子id列表【最新发布话题的圈子排在前面】
	 * @param userId
	 * @return
	 */
	List<Integer> queryMyTopicCircleIds(Integer userId);
	
	/**
	 * 是否首次发布圈子动态
	 * @param userId
	 * @return
	 */
	boolean isFirstAddTopic(Integer userId);

	/**
	 * 查询话题的圈子id
	 * @param bizzId
	 * @param bizzType
	 * @return
	 */
	Integer getTopicIdByBizzType(Integer bizzId, CircleTopicBizzTypeDictEnum bizzType);
}